/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.skycode.tuto.manager;

import com.skycode.cnx.Conexion;
import com.skycode.tuto.dto.MonitorDto;
import com.skycode.tuto.dto.MonitorVideoDto;
import com.skycode.tuto.dto.VideoCommentDto;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

/**
 *
 * @author LumiLatop
 */
public class MonitorVideoManager implements Serializable {

    public MonitorVideoDto inicializar() {
        MonitorVideoDto dto = new MonitorVideoDto();
        dto.setMonitorDto(new MonitorDto());
        dto.setNombre("");
        dto.setUrlVideo("");
        dto.setFechaCreacion(obtenerFechaActual());
        dto.setListaComentariosVideo(new ArrayList<VideoCommentDto>());

        return dto;
    }
    
    public String obtenerFechaActual() {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
        return sdf.format(calendar.getTime());
    }

    public List<MonitorVideoDto> obtenerDetalles(List<MonitorVideoDto> lista) {
        VideoCommentManager vManager = new VideoCommentManager();
        List<MonitorVideoDto> l = new ArrayList<MonitorVideoDto>();
        for (MonitorVideoDto x: lista) {
            System.out.println("DATOS DEL MONITOR VIDEODTO: ");
            System.out.println("ID: " + x.getId());
            
            x.setListaComentariosVideo(vManager.obtenerTodosPorId(x.getId()));
            l.add(x);
        }
        
        return l;
    }
    
    public List<MonitorVideoDto> listarTodos() {
        List<MonitorVideoDto> lista = new ArrayList<MonitorVideoDto>();
        try {
            Connection cnx = Conexion.getConexionOracle();
            String query = "select * from JTUTO_MONITOR_VIDEO";
            PreparedStatement ps = cnx.prepareStatement(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                MonitorVideoDto monitorVideoDto = new MonitorVideoDto();
                monitorVideoDto.setId(rs.getLong(1));
                monitorVideoDto.setMonitorDto(obtenerMonitor(rs.getLong(2)));
                monitorVideoDto.setNombre(rs.getString(3));
                monitorVideoDto.setUrlVideo(rs.getString(4));
                monitorVideoDto.setFechaCreacion(rs.getString(5));
                monitorVideoDto.setListaComentariosVideo(obtenerListaComentarios(monitorVideoDto.getId()));
                lista.add(monitorVideoDto);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return lista;
    }
    
    public MonitorVideoDto obtenerPorId(Long id) {
        MonitorVideoDto monitorVideoDto = new MonitorVideoDto();
        try {
            Connection cnx = Conexion.getConexionOracle();
            String query = "select * from JTUTO_MONITOR_VIDEO where ID = " + id;
            PreparedStatement ps = cnx.prepareStatement(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                monitorVideoDto.setId(rs.getLong(1));
                monitorVideoDto.setMonitorDto(obtenerMonitor(rs.getLong(2)));
                monitorVideoDto.setNombre(rs.getString(3));
                monitorVideoDto.setUrlVideo(rs.getString(4));
                monitorVideoDto.setFechaCreacion(rs.getString(5));
                monitorVideoDto.setListaComentariosVideo(obtenerListaComentarios(monitorVideoDto.getId()));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return monitorVideoDto;
    }
    
    private List<VideoCommentDto> obtenerListaComentarios(Long id) {
        List<VideoCommentDto> lista = new ArrayList<VideoCommentDto>();
        VideoCommentManager videoManager = new VideoCommentManager();
        lista = videoManager.obtenerTodosPorId(id);
        
        return lista;
    }
    
    public MonitorVideoDto obtenerPorIdNoLista(Long id) {
        MonitorVideoDto monitorVideoDto = new MonitorVideoDto();
        try {
            Connection cnx = Conexion.getConexionOracle();
            String query = "select * from JTUTO_MONITOR_VIDEO where ID = " + id;
            PreparedStatement ps = cnx.prepareStatement(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                monitorVideoDto.setId(rs.getLong(1));
                monitorVideoDto.setMonitorDto(obtenerMonitor(rs.getLong(2)));
                monitorVideoDto.setNombre(rs.getString(3));
                monitorVideoDto.setUrlVideo(rs.getString(4));
                monitorVideoDto.setFechaCreacion(rs.getString(5));                
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return monitorVideoDto;
    }

    private MonitorDto obtenerMonitor(Long id) {
        MonitorManager monitorManager = new MonitorManager();
        MonitorDto monitorDto = new MonitorDto();
        monitorDto = monitorManager.obtenerPorIdNoLista(id);

        return monitorDto;
    }

    public void guardar(MonitorVideoDto dto) {
        try {
            Connection cnx = Conexion.getConexionOracle();
            String query = "INSERT INTO JTUTO_MONITOR_VIDEO VALUES (?,?,?,?,?)";
            PreparedStatement ps = cnx.prepareStatement(query);
            ps.setLong(1, generarId(dto));
            ps.setLong(2, dto.getMonitorDto().getId());
            ps.setString(3, dto.getNombre());
            ps.setString(4, dto.getUrlVideo());
            ps.setString(5, dto.getFechaCreacion());
            ps.executeQuery();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public Long generarId(MonitorVideoDto dto) {
        Long maxId = 0L;
        List<MonitorVideoDto> lista = listarTodos();
        if (lista != null && lista.size() > 0) {
            for (MonitorVideoDto x : lista) {
                if (x.getId().compareTo(maxId) > 0) {
                    maxId = x.getId();
                }
            }
            maxId = maxId + 1;
        } else {
            maxId = 100L;
        }
        return maxId;
    }

    public List<MonitorVideoDto> obtenerTodosPorId(Long id) {
        List<MonitorVideoDto> lista = new ArrayList<MonitorVideoDto>();
        try {
            // hoy en la noche vere como implementar hibernate para corregirlo, 
            /**
             * mientras tanto tu anda aprendiendo el codigo, anda revisando
             * deja de ver ese maldito televisor, cuando yo venga, porq voy a ir
             * a barrer, te digo, tu vas a implementarlo con hibernate, y pobre q me digas
             * q no sabes, o q no tienes ni idea de q es los metodo o para q sirven
             * te juro q ahi si te dejo sola con todo ok? ok
             */
            Connection cnx = Conexion.getConexionOracle();
            String query = "select * from JTUTO_MONITOR_VIDEO where MONITOR = " + id;
            PreparedStatement ps = cnx.prepareStatement(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                MonitorVideoDto monitorVideoDto = new MonitorVideoDto();
                monitorVideoDto.setId(rs.getLong(1));
                monitorVideoDto.setMonitorDto(obtenerMonitor(rs.getLong(2)));
                monitorVideoDto.setNombre(rs.getString(3));
                monitorVideoDto.setUrlVideo(rs.getString(4));
                monitorVideoDto.setFechaCreacion(rs.getString(5));
                lista.add(monitorVideoDto);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return lista;
    }
}
